class: center, middle, inverse, title-slide # Visualización y Análisis en
## Sesión II ### Javier Tamayo Leiva
### Pontificia Universidad Católica de Valparaíso ### Junio 22, 2021 --- <style> .title-slide { background-size: 30%; background-position: center left; } .fa { vertical-align: middle; } .center2 { margin: 0; position: absolute; top: 50%; left: 50%; -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } body { text-align: justify; } .title-slide h1 { color: #F2EAD0; font-size: 90px; # font-family: "blacksword"; } .title-slide, .title-slide h2, .title-slide h3 { color: #FFF9F2; # font-family: 'Cormorant Garamond', serif; } .remark-slide-number { position: inherit; } .remark-slide-number .progress-bar-container { position: absolute; bottom: 0; height: 4px; display: block; left: 0; right: 0; } .remark-slide-number .progress-bar { height: 100%; background-color: #F2CB07; } .left-code { color: #777; width: 38%; height: 92%; float: left; } .right-plot { width: 60%; float: right; padding-left: 1%; } .left-code-wide { color: #777; width: 60%; height: 92%; float: left; } .right-plot-narrow { width: 38%; float: right; padding-left: 1%; } .small .remark-code { /*Change made here*/ font-size: 65% !important; } .medium .remark-code { /*Change made here*/ font-size: 75% !important; } </style> ## Análisis exploratorio de datos (*Exploratory data analysis*) .pull-left[ ### Estadística descriptiva - {gtsummary} package <br><br> - {ggpubr} package <br><br> - Visualizando distribuciones <br> - `stat_summary()` <br> - Boxplot <br> - Histograms, Density plot, Heatmaps<br> - q-q plots<br><br> - Análisis de normalidad <br> - Shapiro–Wilk test <br> - Kolmogorov-Smirnov test <br><br> - Análisis de Homocedasticidad <br> - Bartlett’s test <br> - Fligner-Killeen test <br> ] .pull-right[ ### Inferencia Estadística - Análisis de correlación <br> - Pearson's *r* <br> - Spearman's *ρ* (rho) <br> - Kendall's *τ* (tau) <br><br> - Reducción de dimensión <br> - Análisis de componentes principales (*PCA*) <br><br> - Modelos Liniales <br> - `lm()` <br><br> - Análisis de varianza <br> - F-test, T-test <br> - ANOVA test <br> - Kruskal-Wallis test <br> - Scheirer-Ray-Hare test <br><br> - {report} package <br> ] --- ## Dependencias de esta clase ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages(c("tidyverse","ggplot2","gtsummary","flextable","ggpubr","Hmisc","corrplot", "broom","ggbiplot","report")) ``` ```r # Cargar desde la librería sapply(c("tidyverse","ggplot2","gtsummary","flextable","ggpubr","Hmisc","corrplot", "broom","ggbiplot","report"), require, character.only = TRUE, quietly = TRUE) ``` --- class: inverse center middle # Análisis exploratorio de datos <br> --- ## Análisis exploratorio de datos El análisis exploratorio de datos o “EDA” (por sus siglas en inglés **E**xploratory **D**ata **A**nalysis), es como se conoce -en estadística- el proceso por el cual un investigador inspecciona un set de datos con la finalidad de generar preguntas, procesar y adquirir conocimiento (procesa datos, genera resultados), y refina o genera nuevas preguntas. <br> ### Proceso 1. Generar preguntas basandose en los datos. <br> 1. Obtener resultados (procesa datos, gráficos, modelos, etc.). <br> 1. Refinar preguntas y/o generar nuevas preguntas. <br><br> Si bien el nombre puede generar la impresión de un proceso estandarizado, en la práctica no hay reglas que limiten los análisis o técnicas utilizadas para generar el proceso iterativo. Sin embargo, existen análisis que se vuelven recurrentes durante el proceso. <br> .footnote[Análisis exploratorio de datos [(EDA) R4DS-ES](https://es.r4ds.hadley.nz/análisis-exploratorio-de-datos-eda.html)] --- class: inverse center middle ## Estadística descriptiva --- ## Los datos (ggplot2::diamonds)
Precio de mas de 50,000 diamantes cortados <br> --- ## paquete-**gtsummary** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("gtsummary") # Instalar la versión beta desde GitHub install.packages("remotes") remotes::install_github("ddsjoberg/gtsummary") # Para guardar tablas en formato PDF, Word o PowerPoint # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("flextable") # Instalar la versión beta desde GitHub devtools::install_github("davidgohel/flextable") ``` ```r # Cargar desde la librería library(gtsummary) library(flextable) ``` .footnote[[{gtsummary}](http://www.danieldsjoberg.com/gtsummary/index.html) package <br> [{gtsummary}](http://www.danieldsjoberg.com/gtsummary/reference/index.html) package reference] --- ## Resumir data con **gtsummary** ```r dmnd2 <- diamonds %>% select(cut) # Seleccionar solo columnas "class" desde mpg. Se pueden seleccionar # varias columnas en "select()". Ej select(class, year, ...) # También se pueden usar todas las columnas sí se saltan este paso. tbl_summary(dmnd2) %>% modify_header(label = "**Samples**") # Resumir data ```
Samples
N = 53,940
1
cut
Fair
1,610 (3.0%)
Good
4,906 (9.1%)
Very Good
12,082 (22%)
Premium
13,791 (26%)
Ideal
21,551 (40%)
1
n (%)
--- ## Resumir data con **gtsummary** ```r # Crear tabla resumen diamonds %>% tbl_cross(row = cut, col = color) %>% bold_labels() ``` .medium[
Characteristic
color
Total
D
E
F
G
H
I
J
cut
Fair
163
224
312
314
303
175
119
1,610
Good
662
933
909
871
702
522
307
4,906
Very Good
1,513
2,400
2,164
2,299
1,824
1,204
678
12,082
Premium
1,603
2,337
2,331
2,924
2,360
1,428
808
13,791
Ideal
2,834
3,903
3,826
4,884
3,115
2,093
896
21,551
Total
6,775
9,797
9,542
11,292
8,304
5,422
2,808
53,940
] ```r # Guardar en formato Word diamonds %>% tbl_cross(row = color, col = cut) %>% bold_labels() %>% as_flex_table() %>% # Transforma el elemento para su compatibilidad con {flextable} flextable::save_as_docx(path = "./diamonds.docx") # Nombre y ruta al documento Word a crear ``` --- ## paquete-**ggpubr** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("ggpubr") # Instalar la versión beta desde GitHub install.packages("devtools") devtools::install_github("kassambara/ggpubr") ``` ```r # Cargar desde la librería library(ggpubr) ``` .footnote[[{ggpubr}](http://rpkgs.datanovia.com/ggpubr/index.html) package] --- class: inverse center middle ## Estadística descriptiva ### Visualizando distribuciones --- ## Boxplot ```r ggplot(data = diamonds, aes(x=color, y=price, fill=color)) + geom_boxplot(outlier.shape = NA) + theme_classic2() ``` <img src="data:image/png;base64,#Sesion_002_files/figure-html/unnamed-chunk-12-1.png" width="324" /> --- ## Histograms ```r ggdensity(diamonds, x = "price", add = "mean", rug = TRUE, color = "color", fill = "color") ``` <img src="data:image/png;base64,#Sesion_002_files/figure-html/unnamed-chunk-13-1.png" width="324" /> --- ## Density plot ```r ggdensity(diamonds, x = "price", add = "mean", rug = TRUE, color = "color", fill = "color") ``` <img src="data:image/png;base64,#Sesion_002_files/figure-html/unnamed-chunk-14-1.png" width="324" /> --- ## Density plot --- ## Heatmaps --- ## Q-Q plot Q-Q plot (*quantile-quantile* plot) dibuja la correlación entre la muestra de interés y una distribución normal. .left-code[ Versión {ggpubr} package ```r ggqqplot(diamonds$price) ``` Versión {ggplot2} package ```r ggplot(diamonds, aes(sample=price))+ stat_qq() ``` ] .right-plot[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-qq-out-1.png" width="576" /> > <small> Versión {ggpubr} package</small> ] --- class: inverse center middle ## Estadística descriptiva ### Análisis de normalidad --- ## Pueba de normalidad Shapiro-Wilk .pull-left[ ### Shapiro-Wilk (SW) test H0 = La variable muestra una distribución normal <br> H1 = La variable no muestra una distribución normal <br> > Para grupos pequeños N < 5000 ### Interpretación p-value > alfa: No rechazar H0 (normal) <br> p-value < alfa: Rechazar H0 (no normal) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r dmnds<- diamonds %>% slice_sample(n = 5000) shapiro.test(dmnds$price) ``` ``` ## ## Shapiro-Wilk normality test ## ## data: dmnds$price ## W = 0.79634, p-value < 2.2e-16 ``` ```r # 1) Crear serie entre -50 y 50, cada 5 "x" # 2) Crear distribución normal "y" x = seq(-50, 50, by=5) y = dnorm(x, mean(x), sd(x)) shapiro.test(dnorm(x, mean(x), sd(x))) ``` ``` ## ## Shapiro-Wilk normality test ## ## data: dnorm(x, mean(x), sd(x)) ## W = 0.91339, p-value = 0.0641 ``` ] --- ## Pueba de normalidad Kolmogorov-Smirnov .pull-left[ ### Kolmogorov-Smirnov (KS) test H0 = La variable muestra una distribución normal <br> H1 = La variable no muestra una distribución normal <br> > Menos robusto que SW, pero no limita el N ### Interpretación p-value > alfa: No rechazar H0 (normal) <br> p-value < alfa: Rechazar H0 (no normal) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r ks.test(diamonds$price, "pnorm", mean=mean(diamonds$price),sd=sd(diamonds$price)) ``` ``` ## ## One-sample Kolmogorov-Smirnov test ## ## data: diamonds$price ## D = 0.18467, p-value < 2.2e-16 ## alternative hypothesis: two-sided ``` ```r # 1) Crear serie entre -50 y 50, cada 5 "x" # 2) Crear distribución normal "y" x = seq(-50, 50, by=5) y = dnorm(x, mean(x), sd(x)) ks.test(x, "pnorm", mean=mean(x), sd=sd(x)) ``` ``` ## ## One-sample Kolmogorov-Smirnov test ## ## data: x ## D = 0.075542, p-value = 0.999 ## alternative hypothesis: two-sided ``` ] --- ## Distribución de referencia `stat_overlay_normal_density()`de **ggpubr** permite dibujar una distribución normal sobre la distribución de la muestra de interés. ```r ggdensity(data=diamonds, x = "price", fill = "lightgreen") + stat_overlay_normal_density(color = "darkblue", linetype = "dashed") ``` .center[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-sond-out-1.png" width="360" /> ] .footnote[[{ggpubr}](http://rpkgs.datanovia.com/ggpubr/reference/stat_overlay_normal_density.html) package - function] --- ## Transfromación de datos En la situaciones donde no se cumple el supuesto de normalidad, se puede considerar transformar los datos para corregir las distribuciones anormales. <br> - Sesgado a la derecha (o positivo): Generalmente Moda < Mediana < Media <br> - Sesgado a la izquierda (o negativo): Generalmente Moda > Mediana > Media <br> .pull-left[ - square-root para asimetría moderada: <br> - sqrt(x) sesgo positivo, <br> - sqrt(max(x+1) - x) sesgo negativo <br><br> - log para asimetría mayor: <br> - log10(x) sesgo positivo, <br> - log10(max(x+1) - x) sesgo negativ <br><br> - inverso para asimetría severa: <br> - 1/x sesgo positivo, <br> - 1/(max(x+1) - x) sesgo negativ <br> ] .pull-right[ ```r # Log transform ## log10(x) dmnds<- diamonds %>% mutate(price_log = log10(price)) ## log10(max(x+1) - x) dmnds<- diamonds %>% mutate(price_log = log10(max(price+1) - price)) ``` ] -- .bg-washed-red.b--dark-red.ba.bw2.br3.shadow-5.ph4.mt4[ La transformación no siempre será exitosa, frente a lo que se puede optar por métodos no paramétricos. .tr[ — _Advertencia_ ]] --- class: inverse center middle ## Estadística descriptiva ### Análisis de Homocedasticidad --- ## Pueba de homocedasticidad Bartlett’s test .pull-left[ ### Bartlett’s test Se usa para probar la homogeneidad de varianza (homocedasticidad) en k grupos de muestras, donde k puede ser mayor a dos. Está adaptado para datos distribuidos normalmente. <br><br> H0 = Los grupos muestra homocedasticidad <br> H1 = Los grupos (al menos 2) no muestra homocedasticidad <br> ### Interpretación p-value > alfa: No rechazar H0 (homocedasticidad) <br> p-value < alfa: Rechazar H0 (no homocedasticidad) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r # Una variable independiente bartlett.test(price ~ cut, data = diamonds) ``` .medium[ ``` ## ## Bartlett test of homogeneity of variances ## ## data: price by cut ## Bartlett's K-squared = 406.7, df = 4, p-value < 2.2e-16 ``` ] ```r # Múltiples variables independientes bartlett.test(price ~ interaction(cut,color), data=diamonds) ``` .medium[ ``` ## ## Bartlett test of homogeneity of variances ## ## data: price by interaction(cut, color) ## Bartlett's K-squared = 1965.3, df = 34, p-value < 2.2e-16 ``` ] ] --- ## Pueba de homocedasticidad Fligner-Killeen test .pull-left[ ### Fligner-Killeen test Para probar homocedasticidad en k grupos de muestras, donde k puede ser mayor a dos. Más robusto contra las desviaciones de la normalidad o cuando hay problemas relacionados con valores atípicos (outliers). <br><br> H0 = Los grupos muestra homocedasticidad <br> H1 = Los grupos (al menos 2) no muestra homocedasticidad <br> ### Interpretación p-value > alfa: No rechazar H0 (homocedasticidad) <br> p-value < alfa: Rechazar H0 (no homocedasticidad) <br> > alpha hipotético 5% (0,05) ] .pull-right[ ```r # Una variable independiente fligner.test(price ~ cut, data = diamonds) ``` .small[ ``` ## ## Fligner-Killeen test of homogeneity of variances ## ## data: price by cut ## Fligner-Killeen:med chi-squared = 1676.4, df = 4, p-value < 2.2e-16 ``` ] ```r # Múltiples variables independientes fligner.test(price ~ interaction(cut,color), data=diamonds) ``` .small[ ``` ## ## Fligner-Killeen test of homogeneity of variances ## ## data: price by interaction(cut, color) ## Fligner-Killeen:med chi-squared = 3332.1, df = 34, p-value < 2.2e-16 ``` ] ] --- class: inverse center middle ## Inferencia Estadística ### Análisis de correlación --- ## paquete-**Hmisc** y **corrplot** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("Hmisc") install.packages("corrplot") # Instalar la versión beta desde GitHub install.packages("devtools") devtools::install_github("harrelfe/Hmisc") devtools::install_github("taiyun/corrplot", build_vignettes = TRUE) ``` ```r # Cargar desde la librería library(Hmisc) library(corrplot) ``` .footnote[[{Hmisc}](https://hbiostat.org/R/Hmisc/) package <br> [{corrplot}](https://github.com/taiyun/corrplot) package] --- ## Correlación ### ¿Qué es la correlación? <br> La correlación es una medida estadística que nos informa sobre la asociación entre dos variables. Describe cómo se comporta una variable frente a algún cambio en la variable asociada.<br> ### Interpretación Si las variables aumentan o disminuyen juntas, entonces tendrán una correlación positiva. Si las variables son opuestas (una aumenta y la otra disminuye), entonces la correlación será negativa entre ellas. Si varían de forma independiente, la correlación entre ellos será cercana a cero.<br> -- .bg-washed-red.b--dark-red.ba.bw2.br3.shadow-5.ph4.mt4[ 1. Las correlaciones son la medida de dependencia lineal entre dos variables, solo se pueden aplicar entre pares. 1. Son sensibles al número de muestras. Si el número de muestras es pequeños (<20 ~ 30) el análisis pierde poder estadístico (óptimo ≥ 100)<br> .tr[ — _Advertencia_ ]] --- ### Métodos de Correlación .left[ Pearson: Evalúa la relación lineal entre dos variables continuas.<br> ```r cor(diamonds$price, diamonds$carat, use ="pairwise.complete.obs", method = "pearson") ``` ``` ## [1] 0.9215913 ``` ] -- .left[ Spearman: Evalúa la relación monótona. El coeficiente de correlación de Spearman se basa en los valores clasificados por ranking para cada variable en lugar de los datos brutos. <br> ```r dmnds <- diamonds %>% mutate(color=as.numeric(dplyr::recode(color, "D"="1", "E"="2", "F"="3", "G"="4", "H"="5", "I"="6", "J"="7"))) cor(dmnds$price, dmnds$color, use ="pairwise.complete.obs", method = "spearman") ``` ``` ## [1] 0.1501422 ``` ] -- .left[ Kendall: Evalúa la correlación de rangos: la semejanza en el ordenamiento de los datos cuando se agrupan en rangos. <br> ```r dmnds <- dmnds %>% mutate(cut=as.numeric(dplyr::recode(cut,"Ideal"="1", "Premium"="2", "Very Good"="3", "Good"="4", "Fair"="5"))) cor(dmnds$color, dmnds$cut, use ="pairwise.complete.obs", method = "kendall") ``` ``` ## [1] -0.01399794 ``` ] --- ### ¿Cómo gráfico múltiples correlaciones? .pull-left[ ```r # Seleccionar variables numéricas dmnds <- diamonds %>% select_if(is.numeric) %>% as.matrix() cor<-rcorr(dmnds, type=c("spearman")) # o "pearson" # Ajustar valor de p (múltiples comparaciones) cor$P.adj<-p.adjust(cor$P, method = "fdr") dim(cor$P.adj) <- dim(cor$P) # Gráfico corrplot(cor$r, method="circle", type="upper", col=brewer.pal(n=8, name="PuOr"), tl.col="black", tl.srt=90, p.mat = cor$P.adj, sig.level = 0.05, insig = "blank", pch.cex=0.9, pch.col = "white", diag=TRUE, title = NULL, mar = c(.1, .1, .1, .1)) ``` .footnote[[{corrplot}](https://github.com/taiyun/corrplot) package] ] .pull-right[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-corrplot-out-1.png" width="504" /> ] --- class: inverse center middle ## Inferencia Estadística ### Reducción de dimensión --- ## paquete-**ggbiplot** y **broom** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("ggbiplot") install.packages("broom") # Instalar la versión beta desde GitHub install.packages("devtools") devtools::install_github("vqv/ggbiplot") devtools::install_github("tidymodels/broom") ``` ```r # Cargar desde la librería library(ggbiplot) library(broom) ``` .footnote[[{ggbiplot}](https://github.com/vqv/ggbiplot) package <br> [{broom}](https://broom.tidymodels.org) package] --- ## Análisis de componentes principales (*PCA*) El análisis de componentes principales o PCA por su nombre en inglés (**P**rincipal **C**omponent **A**nalysis) es una técnica útil durante el análisis exploratorio de datos. Permite visualizar de mejor manera la variación presente en un conjunto de datos con n > 2 variables. Es particularmente útil en el caso de conjuntos de datos "grandes", donde se tiene muchas variables para cada una de las muestras. <br> Los componentes principales son la extracción de características de la estructura subyacente en los datos. Con las variables "antiguas" creamos "nuevas" variables independientes, donde cada "nueva" variable independiente (PC1, ...) es una combinación de cada una de las "antiguas" variables independientes. Luego ordenamos estas nuevas variables según qué tan bien predicen nuestra variable dependiente. <br> -- ### Interpretación En el análisis se busca encontrar la línea recta que mejor distribuye los datos cuando se proyectan en ella. Este es conocido como el primer componente principal o PC1, y se entiende como el eje que muestra la mayor varianza en los datos. Además, tenemos "eigenvectors" que representan direcciones y "eigenvalues" que representan magnitud o importancia de las "antiguas" variables independientes. Eigenvalues más grandes se correlacionan con variables más importantes. <br> .footnote[[PCA in a nutshell](https://towardsdatascience.com/a-one-stop-shop-for-principal-component-analysis-5582fb7e0a9c)] --- ## Análisis de componentes principales (*PCA*) ```r dmnds.scaled.pca <- diamonds %>% select_if(is.numeric) %>% prcomp(center = TRUE, scale. = TRUE) summary(dmnds.scaled.pca) ``` ``` ## Importance of components: ## PC1 PC2 PC3 PC4 PC5 PC6 PC7 ## Standard deviation 2.1826 1.1340 0.83115 0.41684 0.20077 0.18151 0.11135 ## Proportion of Variance 0.6806 0.1837 0.09869 0.02482 0.00576 0.00471 0.00177 ## Cumulative Proportion 0.6806 0.8642 0.96294 0.98776 0.99352 0.99823 1.00000 ``` -- .left-code-wide[ ```r dmnds.scaled.pca %>% broom::tidy(matrix = "eigenvalues") %>% ggplot(aes(PC, percent)) + geom_col(fill = "#208C8C", alpha = 1) + scale_x_continuous(breaks = 1:7) + scale_y_continuous(labels = scales::percent_format(accuracy =1), expand = expansion(mult = c(0, 0.01))) + coord_cartesian(xlim = c(0, 7), ylim = c(0, 0.7)) + labs(x="Principal Component", y="Percentage of Contribution") + theme_classic2() ``` ] .right-plot-narrow[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-pca-out-1.png" width="360" /> ] --- ## Análisis de componentes principales (*PCA*) ### Gráfico basico .left-code-wide[ ```r ggbiplot(dmnds.scaled.pca, obs.scale = 1, var.scale = 1) ``` > El biplot es una forma típica de representar un PCA. En resumén permite la representación conjunta de las muestras y los eigenvectors/eigenvalues. Sin embargo, si se trabaja con muchas muestras y/o variables, la visualización puede tornarse compleja. ] .right-plot-narrow[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-pca2-out-1.png" width="396" /> ] --- ## Análisis de componentes principales (*PCA*) ### Gráfico **ggplot2** .left-code-wide[ ```r dmnds.scaled.pca %>% broom::augment(diamonds) %>% # Addicionar el set de datos original ggplot(aes(.fittedPC1, .fittedPC2, fill = color)) + geom_point(size = 1, colour="white", pch=21, alpha=1) + guides(fill = guide_legend(title.position = "top", title.hjust = .5)) + labs(fill="Color", x="PC1 (68.06% variance explained)", y="PC2 (18.37% variance explained)") + theme_classic2() ``` ] .right-plot-narrow[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-pca3-out-1.png" width="396" /> ] --- ## Análisis de componentes principales (*PCA*) ### Gráfico **ggplot2** .left-code-wide[ ```r dmnds.scaled.pca %>% broom::augment(diamonds) %>% # Addicionar el set de datos original ggplot(aes(.fittedPC1, .fittedPC2, fill = color)) + geom_point(size = 1, colour="white", pch=21, alpha=1) + guides(fill = guide_legend(title.position = "top", title.hjust = .5)) + coord_cartesian(xlim = c(-10,10), ylim = c(-10,10)) + labs(fill="Color", x="PC1 (68.06% variance explained)", y="PC2 (18.37% variance explained)") + theme_classic2() ``` > Es muy importante centrar el gráfico (0,0) para poder correctamente interpretar la distribución. ] .right-plot-narrow[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-pca4-out-1.png" width="396" /> ] --- ## Análisis de componentes principales (*PCA*) ### Gráfico **ggplot2** eigenvectors/eigenvalues .left-code-wide[ ```r dmnds.scaled.pca %>% broom::tidy(matrix = "rotation") %>% # extract rotation matrix pivot_wider(names_from = "PC", names_prefix = "PC", values_from = "value") %>% # Crea una tabla larga fusionando columnas ggplot(aes(PC1, PC2)) + geom_segment(xend = 0, yend = 0, arrow = arrow(angle = 20, ends = "first", type = "closed", length = grid::unit(8, "pt"))) + geom_text(aes(PC1, PC2, label = column), hjust = 0.5, nudge_x = 0.05, nudge_y = 0.02, color = "#208C8C") + coord_cartesian(xlim = c(-0.5, 0.5), ylim = c(-0.8, 0.8)) + theme_classic2() ``` ] .right-plot-narrow[ <img src="data:image/png;base64,#Sesion_002_files/figure-html/plot-pca5-out-1.png" width="396" /> ] --- ## Análisis de componentes principales (*PCA*) ### Eigenvectors/Eigenvalues .left-code-wide[ ```r dmnds.scaled.pca$rotation %>% as.data.frame() %>% select(PC1:PC2) %>% round(digits = 2) %>% rownames_to_column(var = "Variable") %>% mutate(PC1 = factor(PC1), PC2 = factor(PC2)) %>% bind_rows(tibble("Variable" = "Total variance", "PC1" = c('68.06%'), "PC2" = c('18.37%'))) %>% kableExtra::kable() ``` ] .right-plot-narrow[ <table> <thead> <tr> <th style="text-align:left;"> Variable </th> <th style="text-align:left;"> PC1 </th> <th style="text-align:left;"> PC2 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> carat </td> <td style="text-align:left;"> 0.45 </td> <td style="text-align:left;"> -0.03 </td> </tr> <tr> <td style="text-align:left;"> depth </td> <td style="text-align:left;"> 0 </td> <td style="text-align:left;"> -0.73 </td> </tr> <tr> <td style="text-align:left;"> table </td> <td style="text-align:left;"> 0.1 </td> <td style="text-align:left;"> 0.68 </td> </tr> <tr> <td style="text-align:left;"> price </td> <td style="text-align:left;"> 0.43 </td> <td style="text-align:left;"> -0.04 </td> </tr> <tr> <td style="text-align:left;"> x </td> <td style="text-align:left;"> 0.45 </td> <td style="text-align:left;"> 0 </td> </tr> <tr> <td style="text-align:left;"> y </td> <td style="text-align:left;"> 0.45 </td> <td style="text-align:left;"> 0 </td> </tr> <tr> <td style="text-align:left;"> z </td> <td style="text-align:left;"> 0.45 </td> <td style="text-align:left;"> -0.09 </td> </tr> <tr> <td style="text-align:left;"> Total variance </td> <td style="text-align:left;"> 68.06% </td> <td style="text-align:left;"> 18.37% </td> </tr> </tbody> </table> ] --- class: inverse center middle ## Inferencia Estadística ### Modelos Liniales --- --- --- class: inverse center middle ## Inferencia Estadística ### Análisis de varianza --- ## Análisis de varianza --- ## paquete-**rcompanion** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("rcompanion") install.packages("FSA") ``` ```r # Cargar desde la librería library(rcompanion) library(FSA) ``` .footnote[[{rcompanion}](https://rdrr.io/cran/rcompanion/man/) package <br> [{rcompanion}](https://rcompanion.org/handbook/) handbook] --- ## T-test T-test se utiliza para comprobar la igualdad de las medias entre dos grupos.<br> > La T-test requiere que las dos muestras se distribuyan normalmente. .left-code-wide[ ```r dmnds <- diamonds %>% filter(cut %in% c("Fair","Ideal")) t.test(price ~ cut, dmnds, alternative = "two.sided", var.equal = FALSE) ``` ``` ## ## Welch Two Sample t-test ## ## data: price by cut ## t = 9.7484, df = 1894.8, p-value < 2.2e-16 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## 719.9065 1082.5251 ## sample estimates: ## mean in group Fair mean in group Ideal ## 4358.758 3457.542 ``` ] -- .right-plot-narrow[ ### Interpretación p-value > alfa: No rechazar H0 (igualdad) <br> p-value < alfa: Rechazar H0 (no igualdad) <br> > alpha hipotético 5% (0,05) ] --- ## T-test ### Gráfico ```r ggplot(data = dmnds, aes(x=cut, y=price, fill=cut)) + geom_boxplot(outlier.shape = NA) + stat_compare_means(method = "t.test") + theme_classic2() ``` <img src="data:image/png;base64,#Sesion_002_files/figure-html/unnamed-chunk-42-1.png" width="324" /> --- ## F-test F-test se utiliza para comprobar la igualdad de las varianzas entre dos grupos.<br> > La F-test requiere que las dos muestras se distribuyan normalmente. .left-code-wide[ <br><br> ```r var.test(price ~ cut, dmnds, alternative = "two.sided") ``` ``` ## ## F test to compare two variances ## ## data: price by cut ## F = 0.87399, num df = 1609, denom df = 21550, p-value = 0.0003133 ## alternative hypothesis: true ratio of variances is not equal to 1 ## 95 percent confidence interval: ## 0.8144715 0.9399720 ## sample estimates: ## ratio of variances ## 0.873995 ``` ] -- .right-plot-narrow[ ### Interpretación p-value > alfa: No rechazar H0 (igualdad) <br> p-value < alfa: Rechazar H0 (no igualdad) <br> > alpha hipotético 5% (0,05) ] --- ## ANOVA test (One-way) ANOVA es una técnica estadística que se utiliza para comparar las medias de más de dos grupos. > ANOVA-test requiere que las dos muestras se distribuyan normalmente y sean homocedasticas. ```r dmnds.aov <- aov(price ~ color, data = diamonds) summary(dmnds.aov) ``` ``` ## Df Sum Sq Mean Sq F value Pr(>F) ## color 6 2.685e+10 4.475e+09 290.2 <2e-16 *** ## Residuals 53933 8.316e+11 1.542e+07 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ``` -- .left[ #### Post-Hoc test ```r # Tukey's HSD (honestly significant difference) test TukeyHSD(dmnds.aov) ``` ] --- ## ANOVA test (One-way) ### Gráfico ```r ggplot(data = diamonds, aes(x=color, y=price, fill=color)) + geom_boxplot(outlier.shape = NA) + stat_compare_means(method = "anova") + stat_compare_means(aes(label = ..p.signif..), method = "t.test", ref.group = ".all.", label.y = 18000) + theme_classic2() ``` <img src="data:image/png;base64,#Sesion_002_files/figure-html/unnamed-chunk-46-1.png" width="324" /> --- ## ANOVA test (Two-way) ```r dmnds.aov2 <- aov(price ~ cut*color, data = diamonds) summary(dmnds.aov2) ``` ``` ## Df Sum Sq Mean Sq F value Pr(>F) ## cut 4 1.104e+10 2.760e+09 181.405 <2e-16 *** ## color 6 2.551e+10 4.251e+09 279.371 <2e-16 *** ## cut:color 24 1.653e+09 6.889e+07 4.527 1e-12 *** ## Residuals 53905 8.203e+11 1.522e+07 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ``` -- .left[ #### Post-Hoc test ```r # Tukey's HSD (honestly significant difference) test TukeyHSD(dmnds.aov2) ``` ] --- ## Kruskal-Wallis test ```r kruskal.test(price ~ cut, data = diamonds) ``` ``` ## ## Kruskal-Wallis rank sum test ## ## data: price by cut ## Kruskal-Wallis chi-squared = 978.62, df = 4, p-value < 2.2e-16 ``` -- .left[ #### Post-Hoc test ```r pairwise.wilcox.test(diamonds$price, diamonds$cut, p.adjust.method="fdr") ``` ``` ## ## Pairwise comparisons using Wilcoxon rank sum test ## ## data: diamonds$price and diamonds$cut ## ## Fair Good Very Good Premium ## Good 7.9e-14 - - - ## Very Good < 2e-16 0.023 - - ## Premium 1.5e-05 1.6e-12 < 2e-16 - ## Ideal < 2e-16 < 2e-16 < 2e-16 < 2e-16 ## ## P value adjustment method: fdr ``` ] --- ## Kruskal-Wallis test ### Gráfico ```r ggplot(data = diamonds, aes(x=color, y=price, fill=color)) + geom_boxplot(outlier.shape = NA) + stat_compare_means() + stat_compare_means(aes(label = ..p.signif..), method = "wilcox.test", ref.group = ".all.", label.y = 18000) + theme_classic2() ``` <img src="data:image/png;base64,#Sesion_002_files/figure-html/unnamed-chunk-51-1.png" width="324" /> --- ## Kruskal-Wallis test ### Gráfico También podemos adicionar comparaciones específicas entre los grupos. <br> ```r my_comparisons <- list( c("Fair", "Ideal"), c("Fair", "Premium"), c("Fair", "Very Good") ) ggplot(data = diamonds, aes(x=cut, y=price, fill=cut)) + geom_boxplot(outlier.shape = NA) + stat_compare_means() + stat_compare_means(aes(label = ..p.signif..), method = "wilcox.test", comparisons = my_comparisons, label.y = c(15000, 16000, 17000)) + theme_classic2() ``` <img src="data:image/png;base64,#Sesion_002_files/figure-html/unnamed-chunk-52-1.png" width="324" /> --- ## Scheirer-Ray-Hare test La prueba de Scheirer-Ray-Hare es una prueba no paramétrica que se utiliza para un diseño bidireccional (two-way). ```r scheirerRayHare(price ~ cut * color, data = diamonds) ``` ``` ## ## DV: price ## Observations: 53940 ## D: 0.9999996 ## MS total: 242464795 ``` ``` ## Df Sum Sq H p.value ## cut 4 2.3728e+11 978.62 0.0000e+00 ## color 6 2.9932e+11 1234.50 0.0000e+00 ## cut:color 24 2.1919e+10 90.40 1.2373e-09 ## Residuals 53905 1.2520e+13 ``` -- #### Post-Hoc test > Luego se analizan los grupos significativos. <br> ```r dunnTest(price ~ cut, data = diamonds, method="bh") dunnTest(price ~ color, data = diamonds, method="bh") ``` --- ## paquete-**report** ```r # Instalar desde CRAN (The Comprehensive R Archive Network) install.packages("report") # Instalar la versión beta desde GitHub install.packages("remotes") remotes::install_github("easystats/report") ``` ```r # Cargar desde la librería library(report) ``` .footnote[[report}](https://easystats.github.io/report/index.html) package] --- --- --- --- --- class: center, middle # Muchas Gracias!! Presentación creada en R con los paquetes: [xaringan](https://github.com/yihui/xaringan)<br> [xaringanthemer](https://github.com/gadenbuie/xaringanthemer)<br> [R Markdown](https://rmarkdown.rstudio.com).<br>